package main

func tribonacci(n int) int {
	if n == 0 {
		return 0
	} else if n == 1 {
		return 1
	} else if n == 2 {
		return 1
	} else {
		nums := make([]int, n)
		nums[0] = 0
		nums[1] = 1
		nums[2] = 1
		for i := 3; i < n; i++ {
			nums[i] = nums[i-1] + nums[i-2] + nums[i-3]
		}
		return nums[n-1] + nums[n-2] + nums[n-3]
	}
}

func betterTribonacci(n int) int {
	if n == 0 {
		return 0
	} else if n == 1 {
		return 1
	} else if n == 2 {
		return 1
	} else {
		var (
			num1 = 0
			num2 = 1
			num3 = 1
			lins = 0
		)
		for i := 3; i < n; i++ {
			lins = num3
			num3 = num1 + num2 + num3
			num1 = num2
			num2 = lins
		}

		return num1 + num2 + num3

	}
}
